<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Execution of completion handler on completion of asynchronous operation</title>
<link rel="stylesheet" href="../../../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="../../../index.html" title="Asio">
<link rel="up" href="../asynchronous_operations.html" title="Requirements on asynchronous operations">
<link rel="prev" href="allocation_of_intermediate_storage.html" title="Allocation of intermediate storage">
<link rel="next" href="completion_handlers_and_exceptions.html" title="Completion handlers and exceptions">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="asio C++ library" width="250" height="60" src="../../../asio.png"></td></tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="allocation_of_intermediate_storage.html"><img src="../../../prev.png" alt="Prev"></a><a accesskey="u" href="../asynchronous_operations.html"><img src="../../../up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../home.png" alt="Home"></a><a accesskey="n" href="completion_handlers_and_exceptions.html"><img src="../../../next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="asio.reference.asynchronous_operations.execution_of_completion_handler_on_completion_of_asynchronous_operation"></a><a class="link" href="execution_of_completion_handler_on_completion_of_asynchronous_operation.html" title="Execution of completion handler on completion of asynchronous operation">Execution
        of completion handler on completion of asynchronous operation</a>
</h4></div></div></div>
<p>
          Let <code class="computeroutput">Args...</code> be the argument types of the completion signature
          <code class="computeroutput">Signature</code> and let <code class="literal"><span class="emphasis"><em>N</em></span></code>
          be <code class="computeroutput">sizeof...(Args)</code>. Let <code class="literal"><span class="emphasis"><em>i</em></span></code>
          be in the range [<code class="computeroutput">0</code>,<code class="literal"><span class="emphasis"><em>N</em></span></code>).
          Let <code class="literal">T[sub <span class="emphasis"><em>i</em></span></code>] be the <code class="literal"><span class="emphasis"><em>i</em></span></code>th
          type in <code class="computeroutput">Args...</code> and let <code class="literal">t[sub <span class="emphasis"><em>i</em></span></code>]
          be the <code class="literal"><span class="emphasis"><em>i</em></span></code>th completion handler argument
          associated with <code class="literal">T[sub <span class="emphasis"><em>i</em></span></code>].
        </p>
<p>
          Let <code class="computeroutput">f</code> be a function object, callable as <code class="computeroutput">f()</code>,
          that invokes <code class="computeroutput">completion_handler</code> as if by <code class="literal">completion_handler(forward&lt;T[sub
          <span class="emphasis"><em>0</em></span></code>&gt;(t[sub <span class="emphasis"><em>0</em></span>]), ...,
          forward&lt;T[sub <span class="emphasis"><em>N-1</em></span>]&gt;(t[sub <span class="emphasis"><em>N-1</em></span>]))].
        </p>
<p>
          If an asynchonous operation completes immediately (that is, within the
          thread of execution calling the initiating function, and before the initiating
          function returns), the completion handler shall be submitted for execution
          as if by performing <code class="computeroutput">ex2.post(std::move(f), alloc2)</code>. Otherwise,
          the completion handler shall be submitted for execution as if by performing
          <code class="computeroutput">ex2.dispatch(std::move(f), alloc2)</code>.
        </p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2003-2018 Christopher M. Kohlhoff<p>
        Distributed under the Boost Software License, Version 1.0. (See accompanying
        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="allocation_of_intermediate_storage.html"><img src="../../../prev.png" alt="Prev"></a><a accesskey="u" href="../asynchronous_operations.html"><img src="../../../up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../home.png" alt="Home"></a><a accesskey="n" href="completion_handlers_and_exceptions.html"><img src="../../../next.png" alt="Next"></a>
</div>
</body>
</html>
